{ "err_no": 0, "err_msg": "success", "data": { "booklet": { "booklet_id": "6948353204648148995", "base_info": { "id": 0, "booklet_id": "6948353204648148995", "title": "基于 Node 的 DevOps 实战", "price": 3990, "category_id": "6809637767543259144", "status": 1, "user_id": "2717648473821736", "verify_status": 2, "summary": "通过基于 Node 的项目实战,可以对 DevOps 有更深一步了解,包括不限于开发环节、测试环节、构建和部署环节等等。", "cover_img": "https://p6-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/efec1d57146a4127bb8a0c32f3b0a61d~tplv-k3u1fbpfcp-watermark.image", "section_count": 22, "section_ids": "6948353204497154052|6952116459971543081|6950083168158351392|6947663175189790755|6952419578118930436|6952419578257342467|6949882464382746655|6951403467562811424|6958654270635769887|6959936292293443584|6952435131114061854|6951401724250849294|6949736237024411688|6950523870457626665|7002525324395151364|6950083928392728609|6951349870418460708|6950475271711506446|6950083168397426700|6959912004312104998|6950477526514958349|6950196451792125982|7013305871212445703", "is_finished": 1, "ctime": 1618284482, "mtime": 1655274643, "put_on_time": 1620837569, "pull_off_time": -62135596800, "finished_time": -62135596800, "recycle_bin_time": -62135596800, "verify_time": -62135596800, "submit_time": 1639463847, "top_time": -62135596800, "wechat_group_img": "https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/4f7b7a39c87b4420bf12fd8127736eb9~tplv-k3u1fbpfcp-watermark.image?", "wechat_group_desc": "", "wechat_group_signal": "node", "read_time": 25455, "buy_count": 1859, "course_type": 1, "background_img": "https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c43fb582b124cf3a8ff3292f636dca4~tplv-k3u1fbpfcp-watermark.image?", "is_distribution": 1, "distribution_img": "https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/c79e0a91e26b41a39b5584b3dc1504d2~tplv-k3u1fbpfcp-zoom-1.image?", "commission": 798, "can_vip_borrow": true, "is_sign": false }, "reading_progress": { "id": 0, "booklet_id": "6948353204648148995", "user_id": "3210229681503629", "status": 1, "buy_type": 1, "reading_end": 0, "reading_progress": 4, "last_section_id": "6952116459971543081", "has_update": 1, "last_rtime": 1658115930, "ctime": 1626171247, "mtime": 1658224491, "valid_begin_time": 0, "valid_end_time": 0, "borrow_times": 0 }, "user_info": { "user_id": "2717648473821736", "user_name": "CookieBoty", "company": "行云集团", "job_title": "前端小兵成长营", "avatar_large": "https://p3-passport.byteacctimg.com/img/user-avatar/e7a5ef27bfd6a7a336a4043fa6ca160d~300x300.image", "level": 4, "description": "工资到位,四皇干废", "followee_count": 40, "follower_count": 2374, "post_article_count": 39, "digg_article_count": 312, "got_digg_count": 5111, "got_view_count": 331068, "post_shortmsg_count": 19, "digg_shortmsg_count": 5, "isfollowed": false, "favorable_author": 1, "power": 8421, "study_point": 0, "university": { "university_id": "0", "name": "", "logo": "" }, "major": { "major_id": "0", "parent_id": "0", "name": "" }, "student_status": 0, "select_event_count": 0, "select_online_course_count": 0, "identity": 0, "is_select_annual": true, "select_annual_rank": 0, "annual_list_type": 0, "extraMap": {}, "is_logout": 0, "annual_info": [], "account_amount": 0, "user_growth_info": { "user_id": 2717648473821736, "jpower": 0, "jscore": 183.2, "jpower_level": 0, "jscore_level": 4, "jscore_title": "进阶掘友", "author_achievement_list": [], "vip_level": 2, "vip_title": "稳步进阶" }, "is_vip": true }, "event_discount": null, "is_buy": true, "section_updated_count": 22, "is_new": false }, "introduction": { "id": 83978, "section_id": "6948353204497154052", "title": "小册介绍", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "

作者介绍

\n

Hello,大家好,我是 CookieBoty

\n

小册介绍

\n

什么是工程化

\n

一切以提高效率、降低成本、质量保证为目的的手段,都属于工程化

\n

通过一系列的规范、工具提供研发提效自动化质量保障服务稳定实时监控等功能。

\n

为什么前端需要工程化

\n

随着前端技术的发展(React/Vue/Angular、Webpack、TypeScript 以及其他基于 Node 的各种前端框架出现),Web 应用复杂度的增加,前端也从刀耕火种迈向工程化的时代,组件化、工程化、自动化成了前端发展的趋势。这些都已经成为一线互联网前端团队标配。稍具规模的团队大都会根据自身业务与梯度来设计开发符合当前业务的 DevOps 流程

\n

前端可以借助于 Node 渗透到传统界面开发之外的领域,将发展链路延伸到整个 DevOps 中去,从而脱离“切图仔”成为前端工程师

\n

之前在掘金连载过同系列博文,小册的内容会比之前系列文章更加细节、更体系化,适合初中级前端阅读学习。

\n

项目整体架构

\n
系统架构图
\n

\"系统架构设计.png\"

\n
系统流程图
\n

\"项目流程图.png\"

\n

上图是一份较完整的 DevOps 项目流程图,项目实战将会简化部分内容,保留整体主干架构来进行学习开发。

\n
\n

每个团队具体落地的流程都是要贴合自己的业务,本系列是结合之前的工作经验同时尽可能通过简单的项目实例来介绍。

\n
\n

你会学到什么?

\n

小册的学习目录总共分为 20 个章节:

\n

\"image.png\"

\n

整个学习路线将以 Node 为作为切入点,可以对 DevOps 有更深一步了解,包括不限于开发环节测试环节构建和部署环节等等,随着学习内容的推进,你将获得下面的技能:

\n\n

阅读建议

\n

小册的内容比较基础但也非常全面,建议阅读的同学不要只看不动手,基本的设计与代码都会在小册上体现,随着小册的学习,可以尝试动手搭建一套符合现有业务的工程体系。

\n

本系列需要读者最好能具备下述基本技能:

\n\n

如果缺乏相关经验也不要紧,每一章都会尽可能的详细介绍设计思路,再配合代码辅助,阅读小册同时可以进行对应的实战操作。学完全部小册之后,也会基本掌握上述要求。

\n

整本小册的内容涉及非常广,写作的时间会比较长。希望在接下来观看的过程中,你与我能够互相学习、共同成长。

\n

购买须知

\n
    \n
  1. 本小册为图文形式内容服务,共计 20 节,2021年5月13日上线;
  2. \n
  3. 全部文章已更新完成;
  4. \n
  5. 购买用户可享有小册永久的阅读权限;
  6. \n
  7. 购买用户可进入小册微信群,与作者互动;
  8. \n
  9. 掘金小册为虚拟内容服务,一经购买成功概不退款;
  10. \n
  11. 掘金小册版权归北京北比信息技术有限公司所有,任何机构、媒体、网站或个人未经本网协议授权不得转载、链接、转贴或以其他方式复制发布/发表,违者将依法追究责任;
  12. \n
  13. 在掘金小册阅读过程中,如有任何问题,请邮件联系 xiaoce@xitu.io
  14. \n
", "draft_content": "", "draft_title": "小册介绍", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 221, "read_count": 0, "comment_count": 0, "ctime": 1618192338, "mtime": 1618192338, "is_update": 1, "draft_read_time": 0, "vid": "", "reading_progress": null }, "sections": [ { "id": 84070, "section_id": "6952116459971543081", "title": "环境篇 - 虚拟机 & GitLab", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "环境篇 - 虚拟机 & GitLab", "markdown_content": "", "markdown_show": "", "is_free": 1, "read_time": 852, "read_count": 11082, "comment_count": 76, "ctime": 1618694333, "mtime": 1618694333, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": { "id": 0, "booklet_id": "6948353204648148995", "user_id": "3210229681503629", "section_id": "6952116459971543081", "reading_end": 0, "reading_progress": 0, "reading_position": 0, "has_update": 1, "last_rtime": 1658115930, "ctime": 1658115917, "mtime": 1658224631 } }, { "id": 83979, "section_id": "6950083168158351392", "title": "环境篇 - 环境配置", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "环境篇 - 环境配置", "markdown_content": "", "markdown_show": "", "is_free": 1, "read_time": 1742, "read_count": 5920, "comment_count": 20, "ctime": 1618192338, "mtime": 1618192338, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 83980, "section_id": "6947663175189790755", "title": "设计篇- 项目分析与设计", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "设计篇- 项目分析与设计", "markdown_content": "", "markdown_show": "", "is_free": 1, "read_time": 713, "read_count": 4979, "comment_count": 2, "ctime": 1618192464, "mtime": 1618192464, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84075, "section_id": "6952419578118930436", "title": "Node 新手篇 - Egg", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "Node 新手篇 - Egg", "markdown_content": "", "markdown_show": "", "is_free": 1, "read_time": 696, "read_count": 5086, "comment_count": 7, "ctime": 1618753231, "mtime": 1618753231, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84073, "section_id": "6952419578257342467", "title": "Node 工具篇 - Gitlab Api", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "Node 工具篇 - Gitlab Api", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 2364, "read_count": 3976, "comment_count": 10, "ctime": 1618738394, "mtime": 1618738394, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 83982, "section_id": "6949882464382746655", "title": "Node 工具篇 - 全局与工具类", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "Node 工具篇 - 全局与工具类", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 2518, "read_count": 2546, "comment_count": 12, "ctime": 1618192501, "mtime": 1618192501, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84042, "section_id": "6951403467562811424", "title": "Node 业务篇 - 流程开发", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "Node 业务篇 - 流程开发", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 1514, "read_count": 2274, "comment_count": 9, "ctime": 1618499855, "mtime": 1618499855, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84153, "section_id": "6958654270635769887", "title": "Node 业务篇 - Jenkins & Node", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "Node 业务篇 - Jenkins & Node", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 1389, "read_count": 2544, "comment_count": 5, "ctime": 1620304859, "mtime": 1620304859, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84191, "section_id": "6959936292293443584", "title": "学习里程碑 | 🏆 - 服务端完结", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "学习里程碑 | 🏆 - 服务端完结", "markdown_content": "", "markdown_show": "", "is_free": 1, "read_time": 212, "read_count": 3193, "comment_count": 3, "ctime": 1620546640, "mtime": 1620546640, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84076, "section_id": "6952435131114061854", "title": "React 基础篇 - 前端界面开发", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "React 基础篇 - 前端界面开发", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 1275, "read_count": 1984, "comment_count": 8, "ctime": 1618753292, "mtime": 1618753292, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84039, "section_id": "6951401724250849294", "title": "脚手架篇 - CLI 工具", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "脚手架篇 - CLI 工具", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 2441, "read_count": 2034, "comment_count": 8, "ctime": 1618499529, "mtime": 1618499529, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 83984, "section_id": "6949736237024411688", "title": "脚手架篇 - 基础模板", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "脚手架篇 - 基础模板", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 5019, "read_count": 1337, "comment_count": 10, "ctime": 1618192528, "mtime": 1618192528, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84038, "section_id": "6950523870457626665", "title": "插件篇 - Vscode", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "插件篇 - Vscode", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 585, "read_count": 989, "comment_count": 0, "ctime": 1618499498, "mtime": 1618499498, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": { "id": 0, "booklet_id": "6948353204648148995", "user_id": "3210229681503629", "section_id": "6950523870457626665", "reading_end": 0, "reading_progress": 99, "reading_position": 99, "has_update": 1, "last_rtime": 1649059675, "ctime": 1636817141, "mtime": 1658224637 } }, { "id": 84835, "section_id": "7002525324395151364", "title": "学习里程碑 | 🏆 - 客户端完结", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "学习里程碑 | 🏆 - 客户端完结", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 88, "read_count": 650, "comment_count": 0, "ctime": 1630770572, "mtime": 1630770572, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 83995, "section_id": "6950083928392728609", "title": "构建篇 - Docker", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "构建篇 - Docker", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 500, "read_count": 1371, "comment_count": 0, "ctime": 1618283650, "mtime": 1618283650, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84036, "section_id": "6951349870418460708", "title": "构建篇 - Jenkins 进阶", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "构建篇 - Jenkins 进阶", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 491, "read_count": 1130, "comment_count": 2, "ctime": 1618499338, "mtime": 1618499338, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84000, "section_id": "6950475271711506446", "title": "构建篇 - 代码审查卡点", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "构建篇 - 代码审查卡点", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 463, "read_count": 1062, "comment_count": 2, "ctime": 1618284156, "mtime": 1618284156, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 83997, "section_id": "6950083168397426700", "title": "部署篇 - Kubernetes", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "部署篇 - Kubernetes", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 878, "read_count": 1139, "comment_count": 2, "ctime": 1618283830, "mtime": 1618283830, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84188, "section_id": "6959912004312104998", "title": "监控篇 - 线上埋点、预警", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "监控篇 - 线上埋点、预警", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 522, "read_count": 1306, "comment_count": 2, "ctime": 1620486098, "mtime": 1620486098, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84001, "section_id": "6950477526514958349", "title": "监控篇 - 服务性能监控", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "监控篇 - 服务性能监控", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 448, "read_count": 1054, "comment_count": 0, "ctime": 1618284189, "mtime": 1618284189, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": { "id": 0, "booklet_id": "6948353204648148995", "user_id": "3210229681503629", "section_id": "6950477526514958349", "reading_end": 0, "reading_progress": 0, "reading_position": 0, "has_update": 1, "last_rtime": 1636773898, "ctime": 1636773898, "mtime": 1658224643 } }, { "id": 83999, "section_id": "6950196451792125982", "title": "综合篇 - 整体流程打通", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "综合篇 - 整体流程打通", "markdown_content": "", "markdown_show": "", "is_free": 0, "read_time": 324, "read_count": 902, "comment_count": 0, "ctime": 1618283992, "mtime": 1618283992, "is_update": 0, "draft_read_time": 0, "vid": "", "reading_progress": null }, { "id": 84964, "section_id": "7013305871212445703", "title": "最终章 | 🏆 - 旅程的终点", "user_id": "2717648473821736", "booklet_id": "6948353204648148995", "status": 1, "content": "", "draft_content": "", "draft_title": "最终章 | 🏆 - 旅程的终点", "markdown_content": "", "markdown_show": "", "is_free": 1, "read_time": 200, "read_count": 1045, "comment_count": 4, "ctime": 1633535266, "mtime": 1633535266, "is_update": 1, "draft_read_time": 0, "vid": "", "reading_progress": null } ] } }